/*************************************************************************
	> File Name: oj-391_split_sequence.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2020年11月01日 星期日 19时16分20秒
 ************************************************************************/

#include <iostream>
using namespace std;

long long n, m, num[100005], tl, tr;

long long func(long long);
long long bin_search();

int main() {
    cin >> n >> m;
    for (int i = 0; i < n; ++i) {
        cin >> num[i];
        tl = min(tl, num[i]);
        tr += num[i];
    }
    cout << bin_search() << endl;
    return 0;
}

long long bin_search() {
    while (tl != tr) {
        long long mid = (tl + tr) / 2;
        long long s = func(mid);
        if (s <= m) {
            tr = mid;
        }
        else {
            tl = mid + 1;
        }
    }
    return tl;
}

long long func(long long x) {
    //每段的最大值为x
    long long cnt = 0, now = 0;
    for (int i = 0; i < n; ++i) {
        //如果这一段的总和等于x
        if (now + num[i] == x) {
            cnt++;
            //则从总和归零，开始新一段的计算
            now = 0;
        } 
        //如果加到i这里已经超出了x
        //那么从下一段开始计算，now置为下一段第一个元素的值
        else if (now + num[i] > x) {
            cnt++;
            now = num[i];
        }
        //如果这一段还没超过x，继续加和
        else {
            now += num[i];
        }
    }
    //如果整个数组遍历完，now还>0说明还有一段，段数需要+1
    if (now > 0) {
        cnt++;
    }
    return cnt;
}
